/**
 ******************************************************************************
 * @file           : bsp_dht11.h
 * @brief          : DHT11 Driver Header File
 ******************************************************************************
 * @attention
 *
 * DHT11温湿度传感器驱动头文件
 * 单总线协议，测量范围：温度0~50°C，湿度20%~90%RH
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_DHT11_H
#define __BSP_DHT11_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include "./Devices/DHT11/bsp_dht11_config.h"

/* Exported types ------------------------------------------------------------*/

/**
 * @brief DHT11错误码枚举
 */
typedef enum
{
    DHT11_OK = 0,               /*!< 成功 */
    DHT11_ERROR_TIMEOUT,        /*!< 超时错误 */
    DHT11_ERROR_CHECKSUM,       /*!< 校验错误 */
    DHT11_ERROR_PARAM           /*!< 参数错误 */
} DHT11_Error_e;

/**
 * @brief DHT11数据结构体
 */
typedef struct
{
    uint8_t  humidity_int;      /*!< 湿度整数部分 */
    uint8_t  humidity_dec;      /*!< 湿度小数部分 */
    uint8_t  temperature_int;   /*!< 温度整数部分 */
    uint8_t  temperature_dec;   /*!< 温度小数部分 */
    float    humidity;          /*!< 湿度（%RH） */
    float    temperature;       /*!< 温度（°C） */
} DHT11_Data_t;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/**
 * @brief       初始化DHT11
 *
 * @retval      DHT11_OK=成功, 其他=失败
 */
DHT11_Error_e dht11_init(void);

/**
 * @brief       读取温湿度数据
 *
 * @param[out]  data: 数据指针
 *
 * @retval      DHT11_OK=成功, 其他=失败
 */
DHT11_Error_e dht11_read(DHT11_Data_t *data);

/**
 * @brief       单独读取温度
 *
 * @param[out]  temperature: 温度值指针（°C）
 *
 * @retval      DHT11_OK=成功, 其他=失败
 */
DHT11_Error_e dht11_read_temperature(float *temperature);

/**
 * @brief       单独读取湿度
 *
 * @param[out]  humidity: 湿度值指针（%RH）
 *
 * @retval      DHT11_OK=成功, 其他=失败
 */
DHT11_Error_e dht11_read_humidity(float *humidity);

#ifdef __cplusplus
}
#endif

#endif /* __BSP_DHT11_H */
